// 导入 express
const express = require('express')
const bodyParser = require('body-parser');
const path = require('path')

const fs = require('fs')

// 创建服务起的实例对象
const app = express()

// 导入jwt模块
const jwt = require('jsonwebtoken')

//导入用于将客户端发过来的jwt字符串解析还原成json对象包
const expressjwt = require('express-jwt')


//定义密钥
const secret = 'secretKey'
  


// 使用 bodyParser 中间件来解析 JSON 请求体
app.use(bodyParser.json());

// 导入并配置cors中间件
const cors = require('cors')
// app.use(cors())
app.use(cors({
    origin: '*', // 允许的前端域
    credentials: true, // 允许携带凭证信息
  }));

// 配置解析表单数据的中间件,只能解析
app.use(express.urlencoded({ extended: false }))


//这个需要在路由之前，封装res.cc函数
app.use((req,res,next) => {
    // status 默认值为1，表示失败的情况
    // err的值，可能是一个错误的对象，也可能是一个错误的描述字符串
    res.cc = function (err, status = 1) {
        res.send({
            status,
            message: err instanceof Error ? err.message : err
        })
    }
    next()
})

// 将中间件实例传递给 app.use()
// app.use(expressjwt({secret:'secretKey'}).unless({path: [/^\/api\//]}));

// app.use(expressjwt({secret:'secretKey'}).unless({ path: [/^\/api\/login/]}));
app.use('/api/client/list', expressjwt({ secret: 'secretKey' }));



// 错误处理中间件应该在 expressJWT 之后使用
app.use((err, req, res, next) => {
    // token 解析失败导致的错误
    console.log(err.name, "错误名字")
    if (err.name === 'UnauthorizedError') {
        return res.send({
            status: 401,
            message: 'token已过期，请重新登录'
        });
    }
    //其他原因导致的错误
    res.send({ status: 500, message: '未知错误' });
});


// 导入并使用用户路由
const testRouter = require('./router/test')
app.use('/api', testRouter)

// 导入并使用用户路由
const userRouter = require('./router/user')
app.use('/api', userRouter)


// 导入并使用图片路由
const images = require('./router/images')
app.use('/api', images)

//导入并使用文章路由
const article = require('./router/article')
app.use('/api', article)

// 导入使用产品列表
const cars = require('./router/cars')
app.use('/api', cars)

//导入搜索
const search = require('./router/search')
app.use('/api', search)

app.use('/uploads', express.static(path.join(__dirname, 'uploads')));

// const hostname = '127.0.0.1';
// 启动服务器
app.listen(3007,  () => {
    console.log(`api server running at http://:3007`)
    console.log('启动成功')
})